# _*_ coding:utf-8 _*_
from Utils import getPathInfo
import xlrd,os
import openpyxl
'''
    xlrd模块去读excel时会将数字类型的自动转化为浮点数
'''

# xlrd方式
class readExcel(object):
    def __init__(self, xlsx_name):
        path = getPathInfo.get_Path()                               #获得上级目录路径
        self.xlsPath = os.path.join(path, 'TestData', xlsx_name)    #获取用例文件路径
        self.file = xlrd.open_workbook(self.xlsPath)                #打开用例Excel

    # 返回所有sheet名称
    def get_sheetnames(self):
        return self.file.sheet_names()

    # 获取Excel中测试用例相关信息
    def get_xlsx(self,sheet):
        data = []                                                   #定义一个空列表
        sheet = self.file.sheet_by_name(sheet)                      #获得指定sheet数据
        row_value1 = sheet.row_values(0)                            #获取第1行的标题
        nrows = sheet.nrows                                         #获取当前sheet行数
        ncols = sheet.ncols                                         #获取当前sheet列数
        for i in range(1, nrows):                                   #从第2行遍历当前sheet
            row = sheet.row_values(i)                               #获取行数据  返回list
            dict = {}                                               #创建空字典
            for j in range(0, ncols):                               #遍历sheet列，组成字典
                if row_value1[j] == 'id':
                    dict[row_value1[j]] = int(row[j])               #将id的值转化为int型
                else:
                    dict[row_value1[j]] = row[j]                    #从第一列开始，将每一列的数据与第1行的数据组成一个键值对，形成字典
            data.append(dict)                                       #将字典添加list中

            #将值为为空的键值对 删掉
            for key in list(dict.keys()):
                if dict[key] is None or dict[key] == '':
                    del dict[key]
        return data                                                 #返回列表

# openpyxl
class readEx:
    def __init__(self, xlsx_name):
        path = getPathInfo.get_Path()  # 获得上级目录路径
        self.xlsPath = os.path.join(path, 'TestData', xlsx_name)  # 获取用例文件路径
        self.excle = openpyxl.load_workbook(self.xlsPath)  # 打开用例Excel

    # 返回所有sheet名称
    def get_sheetnames(self):
        return self.excle.sheetnames

    #读取数据
    #def get_xlsx(self, sheet):
        # sheetname = self.excle[sheet]
        #
        # #获取字段名
        # fields = []
        # for i in sheetname.iter_rows(max_row=1):
        #     for a in i:
        #         fields.append(a.value)
        # data = []
        # for r in sheetname.iter_rows(min_row=2):
        #     rows = {}
        #     for i, k in zip(r, fields):
        #         rows[k] = i.value
        #     data.append(rows)
        # return data

    def get_xlsx(self, sheetname):
        sheet = self.excle[sheetname]  # 定位表单
        test_data = []  # 创建一个空列表
        for row in range(2, sheet.max_row + 1):
            sub_data = {}
            for column in range(1, sheet.max_column + 1):
                sub_data[sheet.cell(1, column).value] = sheet.cell(row, column).value  # Excel的第一行数据作为字典的key；
            test_data.append(sub_data)  # 将每行的数据循环加到列表中
        return test_data


if __name__ == '__main__':
    # x = readEx("1.xlsx")
    # print(x.get_sheetnames())
    # print(x.get_xlsx("Sheet1"))

    y = readEx("1.xlsx")
    #print(y.get_sheetnames())
    print(y.get_xlsx("test"))